//
//  WLProxyTask.h
//  WLProxy
//
//  Created by wangpeng on 2021/7/23.
//

#import <Foundation/Foundation.h>

typedef NS_ENUM(NSInteger, WLProxyTaskMethod)
{
	WLProxyTaskMethodAsyncGet		= 0,	// 异步下载
	WLProxyTaskMethodAsyncPut,				// 异步上传
	WLProxyTaskMethodSyncGet,				// 同步下载
	WLProxyTaskMethodSyncPut,				// 同步上传
};

@interface WHWLProxyTask : NSObject

/// 创建任务
/// @param session 		任务配置
/// @param config 		请求配置
/// @param params 		请求参数
/// @param custom 		自定义参数
/// @param method 		请求方式
/// @param progress     进度回调
/// @param success 		成功回调
/// @param failure 		失败回调
/// @note				1. 入参 session 的 XML 格式：
///						<param>
///							<uri>自己的标识</uri>
///							<path>运行时数据全路径（放接收文件和日志等，不填则默认动态库所在路径）</path>
///                         <store>接收数据转移目录</store>
///							<logv>日志等级 0 1 2 3 4</logv>
///							<runtime>
///								<thread_recv>接收线程数（不填则默认2）</thread_recv>
///								<thread_send>发送线程数（不填则默认1）</thread_send>
///							</runtime>
///						</param>
///						2. 入参 config 的 XML 格式：
///						<param>
///							<proxy>代理服务地址 IP:PORT</proxy>
///							<target>请求对方的标识</target>
///							<timeout>超时（秒）</timeout>
///						</param>
///						3. 入参 params 的格式：
///							a. 当请求方式为下载时，params 与使用服务提供者约定
///							b. 当请求方式为上传时，入参 params 的 XML 格式：
///							<manifest>
///								<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///								<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///								...
///								<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///							</manifest>
///	@note progress		result 的 XML 格式：
///						<info>
///							<doing_file>当前上传/下载文件名</doing_file>
///							<doing_pos> 当前文件进度(bytes)</doing_pos>
///							<doing_size>当前文件大小(bytes)</doing_size>
///							<total_pos> 所有文件进度(bytes)</total_pos>
///							<total_size>所有文件大小(bytes)</total_size>
///						</info>
///	@note success			result 的 XML 格式：
///						<manifest>
///							<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///							<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///							...
///							<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///						</manifest>
///	@note failure			result 的 XML 格式：
///						<info>
///							<error_code><error_code>
///							<error_msg><error_msg>
///						</info>
/// @return				任务实例
+ (WHWLProxyTask *)taskWithSession:(NSString *)session
						  config:(NSString *)config
						  params:(NSString *)params
						  custom:(NSString *)custom
						  method:(WLProxyTaskMethod)method
					   progress:(void (^)(NSString *result))progress
						success:(void (^)(NSString *result))success
						failure:(void (^)(NSString *result))failure;

/// 开始请求
- (int)requestTask;

/// 停止请求
- (void)stopTask;

@end
